<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // 当前所在函数的执行对象
  // - 语法：xxx.函数()
  // - this就是这个xxx

  function fn(){
    console.log(this);
  }
  // 默认绑定
  fn();

  var obj = {
    name: "obj",
    show: fn
  }
  // 隐式绑定
  obj.show();

  var foo = {
    name: "foo",
    box: function(s){
      // 默认绑定
      s();
    }
  }
  foo.box( obj.show );

  // 在setTimeout内是默认绑定
  setTimeout( obj.show, 1000 );


  // 强制绑定
  fn.call(obj);
  fn.apply(foo);

  // new绑定
  new fn();


  // 隐式绑定
  document.onclick = function(){
    console.log(this)
  }





  var foo = {
    name: "foo",
    box: function(s){
      s();
    }
  }
  foo.box( obj.show.bind(obj) );

</script>
</html>